# 1-导包
import logging
import os
from config import dir_path
import logging.handlers


# 2-定义一个日志封装的方法
def init_log_config(filename=dir_path+os.sep+"log"+os.sep + "finance.log",when="midnight",
                    interval=1,backup_count=7):
    """
    实现将日志同时输出到控制台，并按天记录到日志文件！
    :param filename: 记录日志文件的完整路径和名称
    :param when: 记录日志的初始时间，默认是每天凌晨0点替换
    :param interval: 记录日志的间隔，默认是1
    :param backup_count: 日志记录的总数量，超过总数量后会覆盖最早的一份日志文件，默认是7份
    :return:
    """

    # 2.1 定义日志器（出口入口，设定日志级别）
    log = logging.getLogger()  # 获取日志器对象
    log.setLevel(logging.INFO)  # 设定日志记录的级别，目前是info

    # 2.2 定义2个处理器（1个输出到控制台、1个记录到日志文件）
    st = logging.StreamHandler()  # 控制台处理器
    ft = logging.handlers.TimedRotatingFileHandler(filename=filename,when=when,interval=interval,
                                                   backupCount=backup_count,encoding="utf-8")  # 日志文件处理器

    # 2.3 定义格式器
    fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"  # 格式化模板
    fm = logging.Formatter(fmt=fmt)  # 格式定义

    # 2.4 将格式器分别组装到2个处理器
    st.setFormatter(fm)  # 将格式器装到控制台处理器
    ft.setFormatter(fm)  # 将格式器装到日志文件处理器

    # 2.5 将2个处理器分别组装到日志器
    log.addHandler(st)  # 将控制台处理器装到日志器
    log.addHandler(ft)  # 将日志文件处理器状态日志器


if __name__ == '__main__':
    # 初始化日志配置
    init_log_config()
    # 使用日志
    logging.debug("这是一个debug日志")
    logging.info("这是一个info日志")
    logging.warning("这是一个warning日志")
    logging.error("这是一个error日志")
    logging.critical("这是一个critical日志")
